package com.xw.dao;

import com.xw.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import javax.validation.constraints.NotBlank;
import java.util.List;

/**
 * @Description: UserDao接口
 * @Author: ASUS
 * @Date: 2024/12/19 9:17
 * @Version: 1.0
 */
@Mapper
public interface UserDao {

    /**
     * 插入语句
     * @param user 用户的实例化对象
     */
    void insert(User user);

    /**
     * 通过主键ID修改
     * @param user
     */
    void updateById(User user);

    /**
     * 通过主键ID查询用户单条信息
     * @param id
     * @return
     */
    User selectById(Integer id);

    /**
     * 通过条件查询用户数据
     * @param user
     * @return
     */
    List<User> selectAll(User user);


    /**
     * 通过主键ID删除用户
     * @param id
     */
    void deleteById(Integer id);

    User selectByUserNameAndPassword(User userQuery);

    /**
     * @return
     */
    @Select("select * from user where role='ROLE_ADMIN'")
    User selectRescue();

    @Select("select * from user where phone=#{phone}")
    User selectByPhone(@Param("phone") String phone);

    void deleteBatchByIds(@Param("ids") List<Integer> ids);

    /**
     * 根据角色名称查找对应的用户列表
     * @param roleName 角色名称
     * @return 对应的用户列表
     */
    List<User> findUsersByRole(String roleName);

    /**
     * 将指定角色的用户的角色字段更新为默认角色（ROLE_USER）
     * @param roleToUpdate 要更新的角色名称
     * @return 受影响的行数
     */
    int updateUsersRoleToDefault(String roleToUpdate);

    /**
     * 根据邮箱查找用户
     * @param email 邮箱
     * @return 用户
     */
    @Select("SELECT * FROM user WHERE email = #{email}")
    User findByEmail(String email);


}
